Сравнение if и switch
Выбор между if и switch зависит от типа условия, которое вы проверяете. Оба инструмента решают похожие задачи, но используются в разных сценариях.
Когда использовать if
Используйте if и else if, когда:
-
Проверяете диапазоны значений
if (score >= 90) { grade = "A"; } else if (score >= 80) { grade = "B"; } else if (score >= 60) { grade = "C"; } -
Используете логические операции (
&&,||,!)if (isLoggedIn && user.role === "admin" && !user.banned) { showAdminPanel(); } -
Условия не сводятся к одному значению — например, проверка наличия данных, состояния сети, времени суток
if (date.getHours() >= 6 && date.getHours() < 12) { setMessage("Доброе утро!"); } -
Значения динамические или вычисляемые —
switchне может работать с выражениями вcase.
Когда использовать switch
Используйте switch, когда:
-
Проверяете одну переменную на равенство конкретным, дискретным значениям — например, строковым ключам, числам, enum-значениям
switch (notificationType) { case "info": case "success": showBanner("Сообщение", "blue"); break; case "warning": showBanner("Предупреждение", "orange"); break; case "error": showBanner("Ошибка", "red"); break; } -
У вас есть перечисление возможных состояний — язык интерфейса, тип уведомления, статус заказа, режим приложения
switch (appTheme) { case "light": case "dark": case "system": applyTheme(appTheme); break; } -
Код должен быть структурирован и легко расширяться — добавление нового
caseне нарушает логику остальных веток.
Производительность
- В современных движках JavaScript (V8, SpiderMonkey) разница в производительности между
ifиswitchминимальна — особенно при небольшом количестве условий. - Для большого числа вариантов (например, 10+ дискретных значений)
switchможет быть чуть быстрее, потому что внутренне использует таблицу переходов (jump table), а не последовательные проверки. - Но в реальных веб и мобильных приложениях эта разница не имеет значения — важнее читаемость и поддерживаемость.
Читаемость
switchлучше читается, когда вы видите список возможных значений — как меню.ifлучше читается, когда вы видите логические правила — как условия в форме.
Пример читаемого switch:
switch (buttonAction) {
case "save":
saveData();
break;
case "cancel":
closeModal();
break;
case "delete":
confirmDelete();
break;
}
Пример читаемого if:
if (isOffline && hasUnsavedChanges) {
showSavePrompt();
} else if (!isOffline && !hasUnsavedChanges) {
hideNotification();
}
Рекомендация
- Используйте
switchдля перечислений — когда у вас есть фиксированный набор значений. - Используйте
ifдля логики — когда нужно проверять диапазоны, комбинации, условия с&&или||. - Не гонитесь за «красивым» кодом — выбирайте то, что понятнее вашей команде.
- Если вы сомневаетесь — выбирайте
if. Он универсален.switch— специализированный инструмент.